iT邦幫忙

2023 iThome 鐵人賽

0
自我挑戰組

IT工作中曾遇到的問題系列 第 26

利用nginx + reverse ssh tunnel 架設臨時對外網頁服務

  • 分享至 

  • xImage
  •  

有時候會需要從外部網路測試網頁或RESTful API的效果,但是Web伺服器架設在內部網路,通常我是ngrok這套方便的工具來達成。

ngrok只要從官網下載程式到伺服器上,再執行一個指令,也就是 ngrok http xxxx => xxxx 就是local開發的port

啟動成功之後,畫面會有兩組URL,其中一個是https,所以對於測試而言是非常快速且便利。

最近在網路上看到reverse ssh tunnel的技術文件,加上我在Cloud上有一台nginx的反向代理伺服器,所以就順著文件來模擬ngrok。

Cloud上的nginx是:test1.twtnn.com

內部的伺服器是:192.168.10.10:2222

在ngrok的設定檔新增一個伺服器設定檔如下,並重啟 nginx:

server {
  server_name test1.twtnn.com;
  location / {
      proxy_pass http://localhost:17777/;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

其中proxy_pass就是當連線test1.twtnn.com時會轉送到http://localhost:17777

如果nginx與你的local server間使用的 https則可以加上proxy_set_header X-Forwarded-Proto https;

接著在內網的伺服器設定reverse ssh tunnel,因為Cloud是用private key登入的,所以要加上-i

$ ssh -R 17777:localhost:2222 -i privte.key account@test1.twtnn.com   

-R可以讓test1.twtnn.com上面的port:17777反向連入內部本機的port:2222

接著在瀏覽器開啟網址:http://test1.twtnn.com ,就可以瀏覽內部的網頁了。

如果想要使用https,這時候在nginx上面,使用certbot來設定https,憑證則可以使用 Let's Encrypt來免費取得,網路上有許多的教學,下次再找時間實做一下。


上一篇
問題集,但是一時之間還真不知道如何解
下一篇
在Windows中刪除Oracle的Session
系列文
IT工作中曾遇到的問題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言